package com.huoyun.cargo.dao;

import java.util.List;

import com.huoyun.base.dao.BaseDao;
import com.huoyun.base.dao.evt.DaoBaseEvt;
import com.huoyun.cargo.bean.CargoInfo;
import com.huoyun.cargo.bean.CargoItem;
import com.huoyun.cargo.dao.evt.GetCargoByCityEvt;
import com.huoyun.cargo.dao.evt.GetCargosByUserIdEvt;
import com.huoyun.cargo.dao.evt.GetSimilarCargoByRouteEvt;
import com.huoyun.cargo.dao.evt.QueryCargoEvt;
import com.huoyun.cargo.model.CargoInfoModel;
import com.huoyun.cargo.model.CargoUserCompanyModel;

public interface CargoInfoDao extends BaseDao<CargoInfo>
{
	public long saveCargoInfo(CargoInfo cargoInfo);
	
	public void updateCargoInfo(CargoInfo cargoInfo);
	
	public void updateInvoice(long invoiceId,long cargoId);
	
	public CargoInfo getCargoInfo(CargoInfo cargoInfo);
	
	public long getCargoCountByUserid(long userId);
	
	public List<CargoInfoModel> getCargosByUserId(GetCargosByUserIdEvt cargosByUserIdEvt);
	
	public CargoInfo getCargoInfoById(long cargoId);
	
	public CargoInfo getCargoInfo(long userId, long cargoId);
	
	public List<CargoInfo> selectCargosByCondition(CargoInfo cargoInfo);
	/**
	 * 根据条件搜索货源信息列表
	 * @param searchCriteria
	 * @return
	 * @author ChengXin
	 */
	public List<CargoItem> selectCargosForCar(final com.huoyun.cargo.dao.evt.SelectCargosForCarEvt searchCriteria);
	/**
	 * 根据条件搜索货源信息列表得到的总数
	 * @param searchCriteria
	 * @return
	 * @author ChengXin
	 */
	public int selectCargosForCarCount(final com.huoyun.cargo.dao.evt.SelectCargosForCarEvt searchCriteria);
	
	public CargoItem getCargoItemByGoodsId(long goodsId);
	
	/**
	 * 更新货物的状态
	 * @param goodsId 货物id
	 * @param status 更新的货物状态
	 * 
	 * @author 刘晓宁
	 */
	public void updateStatus(long userId, long goodsId, int status);
	
	public void delete(long goodsId);
	
	/**
	 * 通过城市信息获取货物列表，用于首页货物展示
	 * @param city 城市
	 * 
	 * @author yangyang
	 */
	public List<CargoInfo> getCargoByCity(GetCargoByCityEvt evt);
	
	
	public long queryCargoCount(QueryCargoEvt queryCargoEvt);
	
	/**
	 * 相关货源查询
	 * @param getSimilarCargoByRouteEvt
	 * @return
	 */
	
	public List<CargoInfo> getSimilarCargoByRoute(GetSimilarCargoByRouteEvt getSimilarCargoByRouteEvt);
	
	public long getSimilarCargoCount(GetSimilarCargoByRouteEvt getSimilarCargoByRouteEvt);
	
	/**
	 * 更新货源查看次数
	 * @param viewCount 
	 * @param cargoId
	 * @author yang
	 */
	
	public void updateViewCount(int viewCount, long cargoId);
	
	/**
	 * 查询最新的N条货物数据
	 * @param topN
	 * @return 
	 * @author yang
	 */
	public List<CargoUserCompanyModel> getLatestNCargo(long topN);
	
	/**
	 * 查询所有的货源信息
	 * @return
	 * @author ChengXin
	 */
	public List<CargoItem> getAll(DaoBaseEvt daoBaseEvt);
	
	/**
	 * 查询所有的货物信息的数目
	 * @return
	 * @author ChengXin
	 */
	public int getAllCount();
}
